/*****************************************************************************
*
*  PROJECT:     SlipStream
*               (CCamera - 3D Camera Class)
*  LICENSE:     GNU General Public License v3 - http://www.gnu.org/licenses/gpl.html

*  DEVELOPERS:  Philip Farquharson 	<B00137077@studentmail.uws.ac.uk>
*				John Gray 			<B00145524@studentmail.uws.ac.uk>		
*				Zohaib Bhatti		<B00104280@studentmail.uws.ac.uk>
*				Euan Hislop 		<B00138636@studentmail.uws.ac.uk>
*
*****************************************************************************/

#ifndef CAMERA_H
#define CAMERA_H

#include <GL/glut.h>
#include "CSingleton.h"

class CCamera : public CSingleton < CCamera >
{
	private:
		// CLASS VARIABLES
		GLfloat cameraXPosition, cameraYPosition, cameraZPosition, cameraXRotation, cameraYRotation, cameraZRotation;

	public:
		// CONSTRUCTOR
		CCamera::CCamera()					{}
		// DECONSTRUCTOR
		CCamera::~CCamera()					{}
		// ACCESSORS
		const float& getXPosition () const					{ return cameraXPosition; }
		const float& getYPosition () const					{ return cameraYPosition; }
		const float& getZPosition () const					{ return cameraZPosition; }
		const float& getXRotation () const					{ return cameraXRotation; }
		const float& getYRotation () const					{ return cameraYRotation; }
		const float& getZRotation () const					{ return cameraZRotation; }

		// CLASS FUNCTIONS
		void setXPosition(GLfloat newCameraXPosition);
		void setYPosition(GLfloat newCameraYPosition);
		void setZPosition(GLfloat newCameraZPosition);
		void setXRotation(GLfloat distanceRotatedOnXAxis);
		void setYRotation(GLfloat distanceRotatedOnYAxis);
		void setZRotation(GLfloat distanceRotatedOnZAxis);
		void init(GLfloat cameraXPosition, GLfloat cameraYPosition, GLfloat cameraZPosition, GLfloat cameraXRotation, GLfloat cameraYRotation, GLfloat cameraZRotation);
		void update(GLfloat cameraXPosition, GLfloat cameraYPosition, GLfloat cameraZPosition, GLfloat cameraXRotation, GLfloat cameraYRotation, GLfloat cameraZRotation);
};

#endif // CAMERA_H